13.1: Izin, Kinerja, dan Keamanan
Materi:
Sekarang Anda telah mempelajari keterampilan inti mendasar yang diperlukan untuk membangun aplikasi Android. Pelajaran ini membahas praktik terbaik yang berkaitan dengan izin, kinerja dan keamanan. Pelajaran ini tidak berisi praktik yang bersangkutan.
Izin
Saat melakukan praktik, ada saatnya aplikasi Anda perlu mendapatkan izin untuk melakukan sesuatu, termasuk saat memerlukannya untuk:
- menghubungkan ke Internet.
- menggunakan penyedia materi di aplikasi lain.
Bagian ini memberikan ringkasan tentang izin sehingga Anda memahami bagaimana dan kapan aplikasi perlu meminta izin agar bisa berfungsi dan bertindak.
Mintalah izin jika tidak memilikinya
Aplikasi bebas menggunakan sumber daya atau data yang dibuatnya, namun harus mendapatkan izin untuk menggunakan sesuatu—data, sumber daya, perangkat keras, perangkat lunak—yang bukan miliknya. Misalnya, aplikasi Anda harus mendapatkan izin untuk membaca data Kontak milik pengguna, atau menggunakan kamera perangkat. Wajar jika aplikasi memerlukan izin untuk membaca Kontak pengguna, namun Anda mungkin bertanya-tanya mengpa perlu izin untuk menggunakan kamera. Hal ini karena perangkat keras kamera bukan milik aplikasi, dan aplikasi Anda harus selalu mendapatkan izin untuk menggunakan apa pun yang bukan bagian dari aplikasi itu sendiri.
Meminta izin
Untuk meminta izin, tambahkan atribut <uses-permission>
ke file manifes Android, bersama nama izin yang diminta. Misalnya, untuk mendapatkan izin menggunakan kamera:
<uses-permission android:name="android.permission.CAMERA"/>
Contoh izin
Kerangka kerja Android menyediakan lebih dari 100 izin yang telah didefinisikan sebelumnya. Ini termasuk beberapa hal yang sudah jelas, antara lain izin untuk mengakses atau menulis data pribadi pengguna seperti:
- membaca dan menulis daftar Kontak, kalender, atau pesan suara milik pengguna
- mengakses lokasi perangkat
- mengakses data dari sensor tubuh
Sebagian izin lain yang telah didefinisikan sebelumnya kurang jelas, seperti izin untuk mengumpulkan statistik baterai, izin untuk menghubungkan ke internet, dan izin untuk menggunakan perangkat keras seperti perangkat keras sidik jari atau kamera.
Android menyertakan beberapa izin yang telah didefinisikan sebelumnya untuk inisialisasi panggilan telepon tanpa mengharuskan pengguna mengonfirmasinya, membaca log panggilan, mengambil keluaran video, mem-boot ulang perangkat, mengubah tanggal dan zona waktu, dan banyak lagi yang lainnya.
Anda bisa melihat semua izin yang didefinisikan sistem di https://developer.android.com/reference/android/Manifest.permission.html.
Izin normal dan berbahaya
Android mengklasifikasikan izin sebagai normal atau berbahaya.
Izin normal adalah untuk tindakan yang tidak memengaruhi privasi pengguna atau data pengguna, seperti menghubungkan ke Internet.
Izin berbahaya adalah untuk aksi yang memengaruhi privasi pengguna atau data pengguna, seperti izin untuk menulis ke pesan suara pengguna.
Android secara otomatis memberikan izin normal namun meminta pengguna untuk memberikan izin berbahaya secara eksplisit.
Cara pengguna memberikan dan mencabut izin
Cara pengguna memberikan dan mencabut izin bergantung pada:
- versi Android yang dijalankan perangkat.
- versi Android untuk aplikasi yang dibuat.
Sebelum Marshmallow (Android 6.0)
Jika aplikasi dibuat untuk versi Android sebelum 6.0 (Marshmallow) atau berjalan pada perangkat yang menggunakan versi Android sebelum Marshmallow, Google Play akan meminta pengguna untuk memberikan izin berbahaya yang diperlukan sebelum memasang aplikasi.
Jika pengguna berubah pikiran dan ingin menolak izin ke aplikasi setelah dipasang, satu-satunya hal yang bisa dilakukan adalah dengan mencopot pemasangan aplikasi.
Marshmallow dan selanjutnya
Jika aplikasi dibuat untuk versi Android dari Android 6.0 (Marshmallow) dan selanjutnya dan sedang berjalan pada perangkat yang menggunakan versi Android dari Marshmallow dan selanjutnya, maka Google Play tidak akan meminta pengguna untuk memberikan izin berbahaya pada aplikasi sebelum memasangnya. Sebagai gantinya, bila pengguna mulai melakukan sesuatu di aplikasi yang memerlukan level izin tersebut, Android akan menampilkan kotak dialog yang meminta pengguna untuk memberikan izin.
Pengguna bisa memberikan atau mencabut izin individual kapan saja. Mereka melakukannya dengan masuk ke Settings App, memilih Apps, dan memilih aplikasi yang relevan. Di bagian Permissions, mereka bisa mengaktifkan atau menonaktifkan izin yang digunakan aplikasi.
Perbedaan dalam model izin memengaruhi developer
Dalam model izin "lama", Google Play dan Kerangka Kerja Android bekerja sama untuk mendapatkan izin dari pengguna. Developer tinggal memastikan aplikasi mencantumkan izin yang diperlukan dalam file manifes Android. Developer bisa beranggapan bahwa jika aplikasi dijalankan, berarti pengguna telah memberikan izin. Developer tidak perlu menulis kode untuk memeriksa apakah izin telah diberikan atau tidak.
Dalam model izin "baru", Anda tidak bisa lagi beranggapan bahwa jika aplikasi dijalankan berarti pengguna telah memberikan izin yang diperlukan. Pengguna bisa memberikan izin saat pertama menjalankan aplikasi, kemudian, kapan saja, mereka berubah pikiran dan mencabut salah satu atau semua izin yang diperlukan aplikasi.
Jadi, aplikasi harus memeriksa apakah masih memiliki izin setiap kali melakukan sesuatu yang memerlukan izin. Android SDK menyertakan API untuk memeriksa jika izin telah diberikan. Inilah cuplikan kode untuk memeriksa apakah aplikasi memiliki izin untuk menulis ke kalender pengguna:
// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_CALENDAR);
Kerangka kerja Android untuk Android 6.0 (API level 23) menyertakan metode untuk memeriksa dan meminta izin. Pustaka Dukungan juga menyertakan metode untuk memeriksa dan meminta izin.
Kami menyarankan Anda menggunakan metode pustaka dukungan untuk menangani izin, karena metode izin di pustaka dukungan menangani pemeriksaan versi Android yang dijalankan pada aplikasi Anda, dan mengambil aksi yang tepat. Misalnya, jika perangkat pengguna menjalankan versi lama, maka metode checkSelfPermission()
di pustaka dukungan akan memeriksa apakah pengguna sudah memberikan izin pada waktu proses, namun jika perangkat menjalankan Marshmallow atau yang lebih baru, maka metode tersebut akan memeriksa apakah izin masih diberikan, dan jika tidak, akan menampilkan dialog kepada pengguna untuk meminta izin.
Pelajaran ini tidak membahas secara detail tentang cara menggunakan API untuk menangani izin. Lihat Meminta Izin pada Waktu Proses untuk detailnya.
Praktik terbaik untuk izin
Bila aplikasi meminta izin terlalu banyak, pengguna akan curiga. Pastikan aplikasi Anda hanya meminta izin untuk fitur dan tugas yang benar-benar diperlukannya, dan pastikan pengguna memahami alasan diperlukannya izin tersebut.
Bila memungkinkan, gunakan Maksud sebagai ganti meminta izin untuk melakukannya sendiri. Misalnya, jika aplikasi Anda perlu menggunakan kamera, kirim Maksud ke aplikasi kamera, dan dengan cara itu aplikasi kamera akan melakukan semua pekerjaan untuk Anda dan aplikasi tidak perlu mendapatkan izin untuk menggunakan kamera (dan itu akan lebih memudahkan Anda menulis kode daripada jika mengakses API kamera secara langsung).
Ketahui selengkapnya tentang Izin di Android
- Izin yang telah didefinisikan sebelumnya
- Praktik terbaik untuk izin
Kinerja
Anda telah berusaha membuat aplikasi yang paling bermanfaat, menarik, dan indah. Akan tetapi, untuk membuatnya tampil beda, Anda juga harus menjadikannya sekecil, secepat, dan seefisien mungkin. Pertimbangkan kemungkinan dampak aplikasi Anda pada baterai, memori, dan ruang disk perangkat. Dan yang terpenting, pertimbangkan paket data pengguna. Saran berikut ini hanya bagian kecil dari masalah kinerja, namun ini akan memberi Anda ide untuk memulai.
Pindahkan tugas yang berjalan lama dari thread utama
Kursus ini sudah membahas tentang memindahkan pekerjaan dari thread utama ke latar belakang untuk membantu menjaga UI tetap lancar dan responsif bagi pengguna. Perangkat keras yang merender tampilan ke layar biasanya memperbarui layar setiap 16 milidetik, jadi jika thread utama melakukan pekerjaan yang memerlukan waktu lebih lama dari 16 milidetik, aplikasi mungkin akan melewatkan bingkai, tersendat, atau mogok, semua itu mungkin akan mengganggu pengguna Anda.
Anda bisa memeriksa seberapa baik aplikasi Anda di layar rendering dalam batas 16 milidetik dengan menggunakan alat (bantu) Profile GPU Rendering di perangkat Android Anda.
- Masuk ke Settings > Developer options.
- Gulir ke bawah ke bagian Monitoring.
- Pilih Profile GPU rendering.
- Pilih On screen as bars di kotak dialog.
Anda akan segera mulai melihat bilah berwarna pada layar.
Buka aplikasi Anda, dan amati bilah berwarna.
Satu bilah menyatakan satu layar yang dirender. Jika bilah berada di atas garis hijau, berarti butuh waktu lebih dari 16 md untuk merender. Warna bilah menyatakan beragam tahapan merender layar.
Baca tentang cara menafsirkan hasil dan maksud beragam tahapan dalam Menganalisis dengan Profile GPU Rendering. Jika Anda menghabiskan waktu menggunakan alat (bantu) Profile GPU rendering di aplikasi, hal itu akan membantu mengidentifikasi bagian interaksi UI mana yang lebih lambat dari perkiraan, kemudian Anda bisa mengambil aksi untuk meningkatkan kecepatan UI aplikasi.
Misalnya, jika bagian bilah Input hijau besar, berarti aplikasi menghabiskan banyak waktu untuk menangani kejadian masukan, yaitu mengeksekusi kode yang dipanggil sebagai hasil callback kejadian masukan. Untuk memperbaikinya, pertimbangkan waktu dan cara meminta masukan pengguna, dan apakah Anda bisa menanganinya dengan lebih efisien.
Sederhanakan UI Anda
Kursus ini telah membahas tentang cara membuat aplikasi menjadi menarik dan memikat secara visual dengan menggunakan pedoman desain material dan mengajari Anda cara menggunakan Layout Editor untuk membuat layout. Anda telah mengetahui bahwa Anda bisa membuat hierarki layout tersarang. Anda telah mengetahui cara menggunakan sumber daya dapat digambar sebagai elemen latar belakang untuk tampilan. Elemen ini memungkinkan Anda membuat layout yang disarangkan secara kompleks dengan berbagai latar belakang dan tampilan yang tumpang tindih satu sama lain di seluruh bagian aplikasi.
Akan tetapi, layout Anda akan digambar lebih cepat dan menggunakan daya baterai lebih sedikit daya jika Anda menghabiskan waktu untuk mendesainnya dengan cara yang paling efisien.
Cobalah hindari:
- Layout yang disarangkan terlalu dalam—Jika layout Anda sempit dan dalam, sistem Android harus melakukan banyak penerusan untuk menata semua tampilan daripada jika hierarki tampilan Anda lebar dan dangkal. Pertimbangkan cara menggabung, meratakan, atau bahkan menghilangkan tampilan.
- Tampilan tumpang tindih—hal ini mengakibatkan "overdraw", yakni aplikasi memboroskan waktu untuk menggambar piksel yang sama beberapa kali, dan hanya tampilan terakhir yang terlihat oleh pengguna. Pertimbangkan cara mengukur dan mengatur tampilan sehingga setiap piksel hanya digambar sekali atau dua kali.
Sederhanakan layout
Pastikan layout Anda hanya menyertakan tampilan dan fungsi yang diperlukan aplikasi. Bagi pengguna, layout sederhana umumnya lebih menarik secara visual, dan digambar lebih cepat, sehingga memberi Anda keuntungan ganda.
Ratakan layout sebisa mungkin, sehingga mengurangi jumlah level yang disarangkan di hierarki tampilan aplikasi Anda. Misalnya, jika layout berisi LinearLayout di dalam LinearLayout di dalam LinearLayout, Anda mungkin bisa menyusun semua tampilan di dalam satu ConstraintLayout.
Lihat panduan Mengoptimalkan UI Anda untuk informasi selengkapnya tentang meningkatkan kinerja UI aplikasi Anda.
Minimalkan tampilan tumpang tindih
Bayangkan mengecat pintu rumah Anda dengan warna merah. Kemudian Anda cat lagi dengan warna hijau. Lalu dicat lagi dengan warna biru. Akhirnya, satu-satunya warna yang terlihat adalah biru, namun Anda memboroskan banyak energi untuk mengecat pintu beberapa kali.
Setiap layout di aplikasi Anda seperti pintu tersebut. Aplikasi memerlukan waktu setiap kali "mengecat" (menggambar) piksel. Jika layout memiliki tampilan tumpang tindih, maka aplikasi Anda menggunakan waktu dan sumber daya untuk terus-menerus menggambar piksel. Coba kurangi jumlah waktu yang digunakan aplikasi Anda untuk menggambar piksel secara berlebihan, dengan mengurangi tampilan tumpang tindih. Berhati-hatilah dalam menggunakan latar belakang yang dapat digambar pada tampilan tumpang tindih dan hanya gunakan bila terlihat.
Lihat panduan Mengurangi Overdraw untuk informasi selengkapnya.
Pantau kinerja aplikasi Anda yang sedang berjalan
Android Studio memiliki alat (bantu) untuk mengukur penggunaan memori, GPU, CPU, dan kinerja jaringan oleh aplikasi. Aplikasi yang mogok sering kali berkaitan dengan kebocoran memori, yang terjadi bila aplikasi mengalokasikan memori dan tidak membebaskannya. Jika aplikasi Anda mengalami kebocoran memori, atau menggunakan memori lebih banyak daripada yang disediakan perangkat, pada akhirnya aplikasi akan menggunakan semua memori yang tersedia pada perangkat. Gunakan alat (bantu) Memory Monitor yang disertakan bersama Android Studio untuk mengamati cara aplikasi menggunakan memori.
- Di Android Studio, di bagian bawah jendela, klik tab Android Monitor. Secara default ini akan membuka logcat.
- Klik tab Monitors di sebelah logcat. Gulir atau perbesar jendela untuk melihat keempat monitor: Memori, CPU, Jaringan, dan GPU.
- Jalankan aplikasi Anda dan berinteraksilah dengannya. Monitor akan diperbarui untuk mencerminkan penggunaan sumber daya oleh aplikasi. Perhatikan, untuk mendapatkan data yang akurat, Anda harus melakukannya pada perangkat fisik, bukan virtual.
Monitor tersebut adalah:
- Monitor memori—Melaporkan cara aplikasi mengalokasikan memori dan membantu Anda memvisualisasikan memori yang digunakan aplikasi.
- Monitor CPU—Memungkinkan Anda memantau penggunaan unit pemroses pusat (CPU) oleh aplikasi. Monitor menampilkan penggunaan CPU secara realtime.
- Monitor GPU—Memberikan representasi visual tentang seberapa lama waktu yang diperlukan unit pemroses grafik (GPU) untuk merender bingkai ke layar.
- Monitor Jaringan—Menampilkan waktu kapan aplikasi membuat permintaan jaringan. Ini memungkinkan Anda melihat cara dan waktu aplikasi mentransfer data, serta mengoptimalkan kode yang mendasarinya dengan semestinya.
Baca laman Android Monitor untuk mengetahui selengkapnya tentang penggunaan monitor.
Ketahui selengkapnya tentang meningkatkan kinerja aplikasi Anda
Overdraw:
Alat:
Praktik terbaik keamanan
Kebanyakan beban dalam membangun aplikasi yang aman telah ditangani oleh Kerangka Kerja Android untuk Anda. Misalnya, aplikasi diisolasi satu sama lain agar tidak bisa mengakses satu sama lain atau menggunakan data masing-masing tanpa izin.
Akan tetapi, sebagai developer aplikasi, Anda bertanggung jawab memastikan aplikasi memperlakukan data pengguna secara aman dan berintegritas. Aplikasi Anda juga bertanggung jawab menjaga keamanan data miliknya.
Menangani data pengguna
Pelajaran ini sudah membahas cara Android menggunakan izin untuk memastikan aplikasi tidak bisa mengakses data pribadi pengguna tanpa seizin mereka. Namun sekalipun pengguna mengizinkan aplikasi Anda mengakses data pribadi mereka, jangan melakukannya kecuali jika benar-benar diperlukan. Dan jika Anda melakukannya, perlakukan data dengan integritas dan rasa hormat. Misalnya, hanya karena pengguna mengizinkan aplikasi untuk memperbarui kalender, bukan berarti Anda diizinkan menghapus semua entri kalender mereka.
Aplikasi Android beroperasi atas dasar kepercayaan tersirat. Pengguna percaya bahwa aplikasi akan menggunakan data mereka dengan cara yang wajar dalam konteks aplikasi.
Jika aplikasi Anda berupa aplikasi perpesanan, kemungkinan pengguna akan memberikan izin untuk membaca kontak mereka. Itu tidak berarti aplikasi Anda diizinkan membaca semua kontak pengguna dan mengirim pesan spam ke semua orang.
Aplikasi Anda hanya boleh membaca dan menulis data pengguna bila benar-benar diperlukan, dan hanya dengan cara yang diperkirakan oleh pengguna. Setelah aplikasi membaca data privat, Anda harus menjaga data tersebut tetap aman dan jangan sampai bocor. Jangan berbagi data privat dengan aplikasi lainnya.
Bergantung pada cara aplikasi menggunakan data pengguna, Anda juga mungkin perlu menyediakan pernyataan tertulis mengenai praktik privasi bila mempublikasikan aplikasi di Google Play store.
Ketahuilah bahwa data yang diperoleh, diunduh, atau dibeli pengguna di aplikasi Anda adalah milik mereka, dan aplikasi harus menyimpannya dengan cara yang tetap memungkinkan akses pengguna, bahkan jika pengguna mencopot pemasangannya.
Wi-Fi Umum
Banyak orang menggunakan aplikasi seluler melalui Wi-Fi umum. Kapan terakhir kali Anda mengakses Internet dari ponsel melalui Wi-Fi umum di kedai kopi, bandara, atau stasiun kereta api?
Desainlah aplikasi Anda untuk melindungi data pengguna bila mereka terhubung ke Wi-Fi umum. Gunakan https
daripada http
bila memungkinkan untuk menghubungkan ke situs web. Enkripsilah data pengguna yang akan ditransmisikan, bahkan data yang mungkin tampak polos seperti nama mereka.
Untuk mentransmisikan data sensitif, implementasikan komunikasi yang diautentikasi dan dienkripsi tingkat-soket dengan menggunakan kelas SSLSocket. Kelas ini menambahkan layer perlindungan keamanan pada protokol transportasi jaringan yang mendasarinya. Perlindungan tersebut menyertakan perlindungan terhadap modifikasi pesan oleh wiretapper, autentikasi yang disempurnakan dengan server, dan perlindungan privasi yang ditingkatkan.
Memvalidasi masukan pengguna
Jika aplikasi menerima masukan (dan hampir setiap aplikasi melakukannya!), Anda perlu memastikan bahwa masukan tersebut tidak membawa sesuatu yang berbahaya.
Jika aplikasi menggunakan kode asli, membaca data dari file, menerima data melalui jaringan, atau menerima data dari sumber eksternal, maka aplikasi Anda berpotensi menimbulkan masalah keamanan. Masalah paling umum adalah buffer meluap, pointer bergetar, dan off-by-one error atau OBOE. Android menyediakan sejumlah teknologi yang mengurangi tingkat eksploitasi kesalahan ini, namun tidak memecahkan masalah pokoknya. Anda bisa menghindari celah keamanan ini dengan menangani pointer dan mengelola buffer secara hati-hati.
Jika aplikasi mengizinkan pengguna untuk memasukkan kueri yang dikirimkan ke database SQL atau penyedia materi, Anda harus mewaspadai injeksi SQL. Inilah teknik yang memungkinkan pengguna jahat bisa menyuntikkan perintah SQL ke dalam pernyataan SQL dengan memasukkan data dalam bidang. Perintah SQL yang disuntikkan bisa mengubah pernyataan SQL dan mengganggu keamanan aplikasi serta database.
Bacalah tentang penggunaan kueri berparameter untuk melindungi terhadap injeksi SQL di bagian penyedia materi pada panduan Tips Keamanan.
Hal lain yang bisa dilakukan untuk membatasi risiko injeksi SQL adalah menggunakan atau memberikan izin READ_ONLY atau WRITE_ONLY untuk penyedia materi.
WebViews
Salah satu kelas View di Android adalah WebView yang menampilkan laman web.
Kursus ini tidak membahas WebView, namun Anda mungkin telah menemukan dan mencobanya sendiri. Kami menyebutkannya di sini karena meskipun sangat keren untuk menampilkan laman web dengan cepat di aplikasi, WebView membawa masalah keamanan.
Karena WebView mengonsumsi materi web yang bisa berisi HTML dan JavaScript, maka bisa mengakibatkan masalah keamanan web umum seperti penulisan skrip lintas situs (injeksi JavaScript).
Secara default, WebView tidak menyediakan widget seperti browser, tidak mengaktifkan JavaScript, dan mengabaikan kesalahan laman web. Jika tujuan Anda hanya untuk menampilkan beberapa HTML sebagai bagian dari UI, maka hal itu bisa diterima asalkan pengguna tidak perlu berinteraksi dengan laman web sesudah membacanya, dan laman web tidak perlu berinteraksi dengan pengguna. Jika Anda ingin web browser berfungsi penuh, panggil aplikasi Browser dengan Maksud URL, bukan menampilkan laman dengan WebView. Ini juga merupakan opsi yang lebih aman daripada memperluas kelas WebView dan mengaktifkan fitur seperti JavaScript.
Keamanan, seperti hal kinerja, adalah topik besar yang tidak bisa dibahas dalam beberapa paragraf. Anda bertanggung jawab memperlakukan data pengguna dengan hati-hati dan menjaga keamanannya setiap saat. Gunakan sumber daya di bawah ini untuk Anda pelajari sebanyak mungkin tentang memperlakukan pengguna dan data mereka dengan perhatian tertinggi.